"""
!/usr/bin/env python
-*- coding: utf-8 -*-
@Author  : MarkJia
@Site    : 
@File    : 7、异常处理.py
"""

import pytest

# 一：try   except
"""
try:
    '可能发生异常的代码块'
except Exception as e:
    print(f'捕获异常代码块{e}') 
"""

a = int(input('输入被除数：'))
b = int(input('输入除数：'))
try:
    c = a / b
    print(f'得到的结果是{c}')
except Exception as e:
    print(f'除数不能为0，抛出异常{e}')
except:
    print('未知异常')
print('程序继续执行')

"""
常用异常处理方法：
    1、try...except...
    2、pytest.raise()   - pytest 自己封装的方法
        可以捕获特定的异常
        获取捕获的异常细节（异常类型，异常信息）
        发生异常，后面的代码将不会被执行
"""


# ============= 异常处理方法 pytest.raise()  ===========================

# 二：pytest.raises

def test_raise0():
    # 预期 是值错误 异常
    with pytest.raises(ValueError, ZeroDivisionError):
        raise ZeroDivisionError("除数为0")


def test_raise():
    # 预期 是值错误 异常
    with pytest.raises(ValueError, match='must be 0 or None'):
        # 实际 捕捉的也是 值异常错误，执行通过
        raise ValueError('value must be 0 or None')


def test_raise1():
    with pytest.raises(ValueError) as exc_info:
        raise ValueError('value must be 42')
    assert exc_info.type is ValueError
    assert exc_info.value.args[0] == 'value must be 42'
